↳ ITRS
↳ ITRStoIDPProof
z
divNat(TRUE, x, y) → d(x, y, 0@z)
cond(FALSE, x, y, z) → 0@z
dNat(TRUE, x, y, z) → cond(>=@z(x, z), x, -@z(y, 1@z), z)
cond(TRUE, x, y, z) → +@z(1@z, d(x, +@z(y, 1@z), +@z(+@z(y, 1@z), z)))
d(x, y, z) → dNat(&&(&&(>=@z(x, 0@z), >=@z(y, 1@z)), >=@z(z, 0@z)), x, y, z)
div(x, y) → divNat(&&(>=@z(x, 0@z), >=@z(y, 1@z)), x, y)
divNat(TRUE, x0, x1)
cond(FALSE, x0, x1, x2)
dNat(TRUE, x0, x1, x2)
cond(TRUE, x0, x1, x2)
d(x0, x1, x2)
div(x0, x1)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
z
divNat(TRUE, x, y) → d(x, y, 0@z)
cond(FALSE, x, y, z) → 0@z
dNat(TRUE, x, y, z) → cond(>=@z(x, z), x, -@z(y, 1@z), z)
cond(TRUE, x, y, z) → +@z(1@z, d(x, +@z(y, 1@z), +@z(+@z(y, 1@z), z)))
d(x, y, z) → dNat(&&(&&(>=@z(x, 0@z), >=@z(y, 1@z)), >=@z(z, 0@z)), x, y, z)
div(x, y) → divNat(&&(>=@z(x, 0@z), >=@z(y, 1@z)), x, y)
(0) -> (2), if ((x[0] →* x[2])∧(y[0] →* y[2])∧(&&(>=@z(x[0], 0@z), >=@z(y[0], 1@z)) →* TRUE))
(1) -> (4), if ((z[1] →* z[4])∧(x[1] →* x[4])∧(-@z(y[1], 1@z) →* y[4])∧(>=@z(x[1], z[1]) →* TRUE))
(2) -> (3), if ((y[2] →* y[3])∧(x[2] →* x[3]))
(3) -> (1), if ((z[3] →* z[1])∧(x[3] →* x[1])∧(y[3] →* y[1])∧(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)) →* TRUE))
(4) -> (3), if ((+@z(y[4], 1@z) →* y[3])∧(+@z(+@z(y[4], 1@z), z[4]) →* z[3])∧(x[4] →* x[3]))
divNat(TRUE, x0, x1)
cond(FALSE, x0, x1, x2)
dNat(TRUE, x0, x1, x2)
cond(TRUE, x0, x1, x2)
d(x0, x1, x2)
div(x0, x1)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDependencyGraphProof
z
(0) -> (2), if ((x[0] →* x[2])∧(y[0] →* y[2])∧(&&(>=@z(x[0], 0@z), >=@z(y[0], 1@z)) →* TRUE))
(1) -> (4), if ((z[1] →* z[4])∧(x[1] →* x[4])∧(-@z(y[1], 1@z) →* y[4])∧(>=@z(x[1], z[1]) →* TRUE))
(2) -> (3), if ((y[2] →* y[3])∧(x[2] →* x[3]))
(3) -> (1), if ((z[3] →* z[1])∧(x[3] →* x[1])∧(y[3] →* y[1])∧(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)) →* TRUE))
(4) -> (3), if ((+@z(y[4], 1@z) →* y[3])∧(+@z(+@z(y[4], 1@z), z[4]) →* z[3])∧(x[4] →* x[3]))
divNat(TRUE, x0, x1)
cond(FALSE, x0, x1, x2)
dNat(TRUE, x0, x1, x2)
cond(TRUE, x0, x1, x2)
d(x0, x1, x2)
div(x0, x1)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDependencyGraphProof
↳ IDP
↳ IDPNonInfProof
z
(1) -> (4), if ((z[1] →* z[4])∧(x[1] →* x[4])∧(-@z(y[1], 1@z) →* y[4])∧(>=@z(x[1], z[1]) →* TRUE))
(3) -> (1), if ((z[3] →* z[1])∧(x[3] →* x[1])∧(y[3] →* y[1])∧(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)) →* TRUE))
(4) -> (3), if ((+@z(y[4], 1@z) →* y[3])∧(+@z(+@z(y[4], 1@z), z[4]) →* z[3])∧(x[4] →* x[3]))
divNat(TRUE, x0, x1)
cond(FALSE, x0, x1, x2)
dNat(TRUE, x0, x1, x2)
cond(TRUE, x0, x1, x2)
d(x0, x1, x2)
div(x0, x1)
(1) (>=@z(x[1], z[1])=TRUE∧x[1]=x[4]∧z[1]=z[4]∧+@z(y[4], 1@z)=y[3]∧x[4]=x[3]∧+@z(+@z(y[4], 1@z), z[4])=z[3]∧-@z(y[1], 1@z)=y[4] ⇒ COND(TRUE, x[4], y[4], z[4])≥NonInfC∧COND(TRUE, x[4], y[4], z[4])≥D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(2) (>=@z(x[1], z[1])=TRUE ⇒ COND(TRUE, x[1], -@z(y[1], 1@z), z[1])≥NonInfC∧COND(TRUE, x[1], -@z(y[1], 1@z), z[1])≥D(x[1], +@z(-@z(y[1], 1@z), 1@z), +@z(+@z(-@z(y[1], 1@z), 1@z), z[1]))∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(3) (x[1] + (-1)z[1] ≥ 0 ⇒ (UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥)∧1 + (-1)Bound + (-1)z[1] + x[1] ≥ 0∧0 ≥ 0)
(4) (x[1] + (-1)z[1] ≥ 0 ⇒ (UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥)∧1 + (-1)Bound + (-1)z[1] + x[1] ≥ 0∧0 ≥ 0)
(5) (x[1] + (-1)z[1] ≥ 0 ⇒ 0 ≥ 0∧1 + (-1)Bound + (-1)z[1] + x[1] ≥ 0∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(6) (x[1] + (-1)z[1] ≥ 0 ⇒ 0 = 0∧0 = 0∧1 + (-1)Bound + (-1)z[1] + x[1] ≥ 0∧0 ≥ 0∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(7) (x[1] ≥ 0 ⇒ 0 = 0∧0 = 0∧1 + (-1)Bound + x[1] ≥ 0∧0 ≥ 0∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(8) (x[1] ≥ 0∧z[1] ≥ 0 ⇒ 0 = 0∧0 = 0∧1 + (-1)Bound + x[1] ≥ 0∧0 ≥ 0∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(9) (x[1] ≥ 0∧z[1] ≥ 0 ⇒ 0 = 0∧0 = 0∧1 + (-1)Bound + x[1] ≥ 0∧0 ≥ 0∧(UIncreasing(D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))), ≥))
(10) (&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z))=TRUE∧>=@z(x[1], z[1])=TRUE∧x[3]=x[1]∧y[3]=y[1]∧x[1]=x[4]∧z[1]=z[4]∧z[3]=z[1]∧-@z(y[1], 1@z)=y[4] ⇒ DNAT(TRUE, x[1], y[1], z[1])≥NonInfC∧DNAT(TRUE, x[1], y[1], z[1])≥COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])∧(UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥))
(11) (>=@z(x[3], z[3])=TRUE∧>=@z(z[3], 0@z)=TRUE∧>=@z(x[3], 0@z)=TRUE∧>=@z(y[3], 1@z)=TRUE ⇒ DNAT(TRUE, x[3], y[3], z[3])≥NonInfC∧DNAT(TRUE, x[3], y[3], z[3])≥COND(>=@z(x[3], z[3]), x[3], -@z(y[3], 1@z), z[3])∧(UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥))
(12) (x[3] + (-1)z[3] ≥ 0∧z[3] ≥ 0∧x[3] ≥ 0∧-1 + y[3] ≥ 0 ⇒ (UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥)∧0 ≥ 0∧-1 + y[3] ≥ 0)
(13) (x[3] + (-1)z[3] ≥ 0∧z[3] ≥ 0∧x[3] ≥ 0∧-1 + y[3] ≥ 0 ⇒ (UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥)∧0 ≥ 0∧-1 + y[3] ≥ 0)
(14) (z[3] ≥ 0∧-1 + y[3] ≥ 0∧x[3] ≥ 0∧x[3] + (-1)z[3] ≥ 0 ⇒ 0 ≥ 0∧-1 + y[3] ≥ 0∧(UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥))
(15) (z[3] ≥ 0∧-1 + y[3] ≥ 0∧z[3] + x[3] ≥ 0∧x[3] ≥ 0 ⇒ 0 ≥ 0∧-1 + y[3] ≥ 0∧(UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥))
(16) (z[3] ≥ 0∧y[3] ≥ 0∧z[3] + x[3] ≥ 0∧x[3] ≥ 0 ⇒ 0 ≥ 0∧y[3] ≥ 0∧(UIncreasing(COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])), ≥))
(17) (D(x[3], y[3], z[3])≥NonInfC∧D(x[3], y[3], z[3])≥DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])∧(UIncreasing(DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])), ≥))
(18) ((UIncreasing(DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])), ≥)∧0 ≥ 0∧0 ≥ 0)
(19) ((UIncreasing(DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])), ≥)∧0 ≥ 0∧0 ≥ 0)
(20) (0 ≥ 0∧0 ≥ 0∧(UIncreasing(DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])), ≥))
(21) (0 = 0∧(UIncreasing(DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])), ≥)∧0 = 0∧0 ≥ 0∧0 ≥ 0∧0 = 0∧0 = 0∧0 = 0∧0 = 0)
POL(-@z(x1, x2)) = x1 + (-1)x2
POL(DNAT(x1, x2, x3, x4)) = -1 + (-1)x4 + x3 + x2 + (-1)x1
POL(COND(x1, x2, x3, x4)) = 1 + (-1)x4 + x2
POL(>=@z(x1, x2)) = 0
POL(0@z) = 0
POL(TRUE) = -1
POL(&&(x1, x2)) = -1
POL(+@z(x1, x2)) = x1 + x2
POL(D(x1, x2, x3)) = (-1)x3 + x2 + x1
POL(FALSE) = 1
POL(1@z) = 1
POL(undefined) = -1
COND(TRUE, x[4], y[4], z[4]) → D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))
COND(TRUE, x[4], y[4], z[4]) → D(x[4], +@z(y[4], 1@z), +@z(+@z(y[4], 1@z), z[4]))
DNAT(TRUE, x[1], y[1], z[1]) → COND(>=@z(x[1], z[1]), x[1], -@z(y[1], 1@z), z[1])
D(x[3], y[3], z[3]) → DNAT(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)), x[3], y[3], z[3])
FALSE1 → &&(FALSE, FALSE)1
-@z1 ↔
&&(TRUE, TRUE)1 ↔ TRUE1
+@z1 ↔
FALSE1 → &&(FALSE, TRUE)1
FALSE1 → &&(TRUE, FALSE)1
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDependencyGraphProof
↳ IDP
↳ IDPNonInfProof
↳ IDP
↳ IDependencyGraphProof
z
(3) -> (1), if ((z[3] →* z[1])∧(x[3] →* x[1])∧(y[3] →* y[1])∧(&&(&&(>=@z(x[3], 0@z), >=@z(y[3], 1@z)), >=@z(z[3], 0@z)) →* TRUE))
divNat(TRUE, x0, x1)
cond(FALSE, x0, x1, x2)
dNat(TRUE, x0, x1, x2)
cond(TRUE, x0, x1, x2)
d(x0, x1, x2)
div(x0, x1)